Data annotation - Merge clusters


library(Seurat)
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Seurat v4 was just loaded with SeuratObject v5; disabling v5 assays and validation
routines, and ensuring assays work in strict v3/v4 compatibility mode
library(tidyverse)
── Attaching core tidyverse packages ────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.4.4     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ──────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(CelltypeR)
Warning: replacing previous import ‘data.table::last’ by ‘dplyr::last’ when loading ‘CelltypeR’
Warning: replacing previous import ‘data.table::first’ by ‘dplyr::first’ when loading ‘CelltypeR’
Warning: replacing previous import ‘data.table::between’ by ‘dplyr::between’ when loading ‘CelltypeR’
Warning: replacing previous import ‘dplyr::filter’ by ‘flowCore::filter’ when loading ‘CelltypeR’
Warning: replacing previous import ‘ggplot2::margin’ by ‘randomForest::margin’ when loading ‘CelltypeR’
Warning: replacing previous import ‘dplyr::combine’ by ‘randomForest::combine’ when loading ‘CelltypeR’
Warning: replacing previous import ‘flowCore::filter’ by ‘dplyr::filter’ when loading ‘CelltypeR’
Warning: replacing previous import ‘flowViz::contour’ by ‘graphics::contour’ when loading ‘flowStats’
Warning: replacing previous import ‘data.table::melt’ by ‘reshape2::melt’ when loading ‘CelltypeR’

Attaching package: ‘CelltypeR’

The following object is masked from ‘package:ggplot2’:

    annotate

Read in the step7 object

nsc <- readRDS("/Users/rhalenathomas/Documents/Data/scRNAseq/ADHD_ZNZ_Mcgill/ADHDresultsFeb10/NSC/step7/objs7/seu_step7.rds")
Warning message:
R graphics engine version 15 is not supported by this version of RStudio. The Plots tab will be disabled until a newer version of RStudio is installed. 

See the Dimplot

DimPlot(nsc, group.by = 'integrated_snn_res.0.25', label = TRUE) 


DimPlot(nsc, group.by = "Celltypes1", label = TRUE)

#DimPlot(nsc, group.by = "Celltypes2", label = TRUE)
#DimPlot(nsc, group.by = "CelltypesMain", label = TRUE)
DimPlot(nsc, group.by = "CelltypesMain2", label = TRUE)

#DimPlot(nsc, reduction = "umap", label = TRUE, pt.size = 0.1, raster = FALSE) 
NPC_glia <- FindMarkers(nsc, ident.1 = "NPC_glia", ident.2 = c("Progenitors", "NPC"), only.pos = TRUE)

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~13s          
  |++                                                | 2 % ~12s          
  |++                                                | 3 % ~12s          
  |+++                                               | 4 % ~12s          
  |+++                                               | 5 % ~20s          
  |++++                                              | 6 % ~19s          
  |++++                                              | 7 % ~17s          
  |+++++                                             | 9 % ~16s          
  |+++++                                             | 10% ~16s          
  |++++++                                            | 11% ~15s          
  |++++++                                            | 12% ~14s          
  |+++++++                                           | 13% ~14s          
  |+++++++                                           | 14% ~13s          
  |++++++++                                          | 15% ~13s          
  |++++++++                                          | 16% ~13s          
  |+++++++++                                         | 17% ~12s          
  |++++++++++                                        | 18% ~12s          
  |++++++++++                                        | 19% ~12s          
  |+++++++++++                                       | 20% ~12s          
  |+++++++++++                                       | 21% ~12s          
  |++++++++++++                                      | 22% ~11s          
  |++++++++++++                                      | 23% ~11s          
  |+++++++++++++                                     | 24% ~11s          
  |+++++++++++++                                     | 26% ~11s          
  |++++++++++++++                                    | 27% ~10s          
  |++++++++++++++                                    | 28% ~10s          
  |+++++++++++++++                                   | 29% ~10s          
  |+++++++++++++++                                   | 30% ~10s          
  |++++++++++++++++                                  | 31% ~09s          
  |++++++++++++++++                                  | 32% ~09s          
  |+++++++++++++++++                                 | 33% ~09s          
  |++++++++++++++++++                                | 34% ~09s          
  |++++++++++++++++++                                | 35% ~09s          
  |+++++++++++++++++++                               | 36% ~08s          
  |+++++++++++++++++++                               | 37% ~08s          
  |++++++++++++++++++++                              | 38% ~08s          
  |++++++++++++++++++++                              | 39% ~08s          
  |+++++++++++++++++++++                             | 40% ~08s          
  |+++++++++++++++++++++                             | 41% ~08s          
  |++++++++++++++++++++++                            | 43% ~07s          
  |++++++++++++++++++++++                            | 44% ~07s          
  |+++++++++++++++++++++++                           | 45% ~07s          
  |+++++++++++++++++++++++                           | 46% ~07s          
  |++++++++++++++++++++++++                          | 47% ~07s          
  |++++++++++++++++++++++++                          | 48% ~07s          
  |+++++++++++++++++++++++++                         | 49% ~07s          
  |+++++++++++++++++++++++++                         | 50% ~07s          
  |++++++++++++++++++++++++++                        | 51% ~07s          
  |+++++++++++++++++++++++++++                       | 52% ~06s          
  |+++++++++++++++++++++++++++                       | 53% ~06s          
  |++++++++++++++++++++++++++++                      | 54% ~06s          
  |++++++++++++++++++++++++++++                      | 55% ~06s          
  |+++++++++++++++++++++++++++++                     | 56% ~06s          
  |+++++++++++++++++++++++++++++                     | 57% ~06s          
  |++++++++++++++++++++++++++++++                    | 59% ~05s          
  |++++++++++++++++++++++++++++++                    | 60% ~05s          
  |+++++++++++++++++++++++++++++++                   | 61% ~05s          
  |+++++++++++++++++++++++++++++++                   | 62% ~05s          
  |++++++++++++++++++++++++++++++++                  | 63% ~05s          
  |++++++++++++++++++++++++++++++++                  | 64% ~05s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~04s          
  |++++++++++++++++++++++++++++++++++                | 67% ~04s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~04s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~04s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~04s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~04s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~03s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~03s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=12s  
View(Neurons_sub)
View(NPC_markers)

Name Fibroblast as Glia Keep NPC-glia Change Precursor vs NPC

NSC-vas is now NSC-APOA1 NSC- SOX2

NPC-MEF2C Progen is really NPC-POU5F1 NPC-S100B

Neurons-DCX (was neurons) Neurons-GRIA1 (was excitatory neurons)

See the neurons object


fcn <- readRDS("/Users/rhalenathomas/Documents/Data/scRNAseq/ADHD_ZNZ_Mcgill/ADHDresultsFeb10/FCN/step7/objs7/seu_step7.rds")

Transfer lables predictions

need to match version 4 and version 5 seurat

Myanchors <- FindTransferAnchors(reference = MBO ,query = fcn, dims = 1:30)
Performing PCA on the provided reference using 1076 features as input.
Projecting cell embeddings
Error in UseMethod(generic = "GetAssayData", object = object) : 
  no applicable method for 'GetAssayData' applied to an object of class "Assay5"

Visualize expression


proliferation = c("PCNA","MKI67")
neuralstem = c("SOX2","NES","PAX6","MASH1")

DotPlot(fcn, features = proliferation, group.by = "integrated_snn_res.0.25")

FeaturePlot(fcn, features = proliferation)

neuralstem = c("SOX2","NES","PAX6","MASH1")

DotPlot(fcn, features = neuralstem, group.by = "integrated_snn_res.0.25")
Warning in FetchData.Seurat(object = object, vars = features, cells = cells) :
  The following requested variables were not found: MASH1

FeaturePlot(fcn, features = neuralstem)
Warning in FetchData.Seurat(object = object, vars = c(dims, "ident", features),  :
  The following requested variables were not found: MASH1

# simplify cell types 1
cluster.ids<-c("Differentating_to_neurons", "NSC", "NSC", "Neurons", "Endothelial", "Endothelial", "Endothelial", "NSC", "Neuroblasts", "Neurons") 
  Idents(fcn) <- 'integrated_snn_res.0.25'
  names(cluster.ids) <- levels(fcn)
  fcn <- RenameIdents(fcn, cluster.ids)
  fcn <- AddMetaData(object=fcn, metadata=Idents(fcn), col.name = "CelltypesMain1")

DimPlot(fcn, label = TRUE, group.by = "CelltypesMain1")

NA
NA
NA
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKRGF0YSBhbm5vdGF0aW9uIC0gTWVyZ2UgY2x1c3RlcnMKCmBgYHtyfQoKbGlicmFyeShTZXVyYXQpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KENlbGx0eXBlUikKCmBgYAoKClJlYWQgaW4gdGhlIHN0ZXA3IG9iamVjdAoKYGBge3J9CiMgTlNDCgpuc2MgPC0gcmVhZFJEUygiL1VzZXJzL3JoYWxlbmF0aG9tYXMvRG9jdW1lbnRzL0RhdGEvc2NSTkFzZXEvQURIRF9aTlpfTWNnaWxsL0FESERyZXN1bHRzRmViMTAvTlNDL3N0ZXA3L29ianM3L3NldV9zdGVwNy5yZHMiKQpjb2xuYW1lcyhuc2NAbWV0YS5kYXRhKQojIGFkZCBteSBhbm5vdGF0aW9ucyBtYWRlIGVhcmxpZXIgCnRhYmxlKG5zYyRSaGFsZW5hX3Bvb2wxX29ial8yX3ByZWRpY3Rpb25zLG5zYyRpbnRlZ3JldGVkX3Nubl9yZXMuMC4yNSkKCmFubm90YXRpb25zIDwtIGMoIkV4TmV1cm9ucyIsIkZpYnJvYmxhc3RzIiwiTmV1cm9ucyIsIlByb2dlbi1EaXYiLCJOU0MtZGl2IiwiTlNDLWRpdi1raTY3IiwiTlBDLWdsaWEiLAogICAgICAgICAgICAgICAgICJOUEMtZ2xpYS1kaXYiLCJOUEMiLCJOZXVyb25zQ2hvbCIsIk5TQy12YXNjdWxhdHVyZSIsIk5QQy1jb3J0aWNhbCIpCmNsdXN0ZXIuaWRzPC1jKCJFeGNpdGF0b3J5X25ldXJvbnMiLCAiRmlicm9ibGFzdHMiLCAiTmV1cm9ucyIsICJQcm9nZW5pdG9yX2RpdiIsICJOU0NfZGl2IiwgIk5TQ19kaXZfS0k2NyIsICJOUENfZ2xpYSIsICJOUENfZGl2X2dsaWEiLCAiTlBDIiwgIkNob2xpbmVyZ2ljX25ldXJvbnMiLCAiTlNDX3Zhc2N1bGF0dXJlIiwgIk5QQ19jb3J0aWNhbCIpCiMgYWRkIGFubm90YXRpb25zCiAgSWRlbnRzKG5zYykgPC0gJ2ludGVncmF0ZWRfc25uX3Jlcy4wLjI1JwogIG5hbWVzKGNsdXN0ZXIuaWRzKSA8LSBsZXZlbHMobnNjKQogIG5zYyA8LSBSZW5hbWVJZGVudHMobnNjLCBjbHVzdGVyLmlkcykKICBuc2MgPC0gQWRkTWV0YURhdGEob2JqZWN0PW5zYywgbWV0YWRhdGE9SWRlbnRzKG5zYyksIGNvbC5uYW1lID0gIkNlbGx0eXBlczEiKQogIAogIAogIAogIApjbHVzdGVyLmlkczwtYygiTmV1cm9ucyIsICJHbGlhIiwgIk5ldXJvbnMiLCAiTlNDIiwgIk5TQyIsICJOU0MiLCAiTlBDLWdsaWEiLCAiTlBDLWdsaWEiLCAiTlBDIiwgIk5ldXJvbnMiLCAiTlNDIiwgIk5TQyIpCiAKICAgIElkZW50cyhuc2MpIDwtICdpbnRlZ3JhdGVkX3Nubl9yZXMuMC4yNScKICBuYW1lcyhjbHVzdGVyLmlkcykgPC0gbGV2ZWxzKG5zYykKICBuc2MgPC0gUmVuYW1lSWRlbnRzKG5zYywgY2x1c3Rlci5pZHMpCiAgbnNjIDwtIEFkZE1ldGFEYXRhKG9iamVjdD1uc2MsIG1ldGFkYXRhPUlkZW50cyhuc2MpLCBjb2wubmFtZSA9ICJDZWxsdHlwZXNNYWluIikKICAgCiAKICAKY2x1c3Rlci5pZHM8LWMoIk5ldXJvbnMiLCAiR2xpYSIsICJOZXVyb25zIiwgIlByb2dlbml0b3JfZGl2IiwgIk5TQ19kaXYiLCAiTlNDX2Rpdl9LSTY3IiwgIk5QQ19nbGlhIiwgIk5QQ19kaXZfZ2xpYSIsICJOUEMiLCAiTmV1cm9ucyIsICJOU0NfdmFzY3VsYXR1cmUiLCAiTlBDX2NvcnRpY2FsIikgICAKICAgIApjbHVzdGVyLmlkczwtYygiTmV1cm9uc19FeCIsICJGaWJyb2JsYXN0cyIsICJOZXVyb25zIiwgIlByb2dlbml0b3JzIiwgIk5TQyIsICJOU0MiLCAiTlBDX2dsaWEiLCAiUHJvZ2VuaXRvcnMiLCAiTlBDIiwgIk5ldXJvbnMiLCAiTlNDX3Zhc2N1bGF0dXJlIiwgIk5TQyIpICMgQ2VsbCB0eXBlcyBzaW1wbGlmaWVkCgpjbHVzdGVyLmlkczwtYygiTmV1cm9ucyIsICJGaWJyb2JsYXN0cyIsICJOZXVyb25zIiwgIlByb2dlbml0b3JzIiwgIk5TQyIsICJOU0MiLCAiTlNDIiwgIlByb2dlbml0b3JzIiwgIk5QQyIsICJOZXVyb25zIiwgIk5TQ192YXNjdWxhdHVyZSIsICJOU0MiKSAjIENlbGwgdHlwZXMgbW9zdCBzaW1wbGlmaWVkCgogCgpjbHVzdGVyLmlkczwtYygiTmV1cm9uc19FeCIsICJGaWJyb2JsYXN0cyIsICJOZXVyb25zIiwgIlByb2dlbml0b3JzIiwgIk5TQyIsICJOU0MiLCAiTlBDX2dsaWEiLCAiUHJvZ2VuaXRvcnMiLCAiTlBDIiwgIk5ldXJvbnMiLCAiTlNDX3Zhc2N1bGF0dXJlIiwgIk5TQyIpICMgQ2VsbCB0eXBlcyBzaW1wbGlmaWVkCiAgSWRlbnRzKG5zYykgPC0gJ2ludGVncmF0ZWRfc25uX3Jlcy4wLjI1JwogIG5hbWVzKGNsdXN0ZXIuaWRzKSA8LSBsZXZlbHMobnNjKQogIG5zYyA8LSBSZW5hbWVJZGVudHMobnNjLCBjbHVzdGVyLmlkcykKICBuc2MgPC0gQWRkTWV0YURhdGEob2JqZWN0PW5zYywgbWV0YWRhdGE9SWRlbnRzKG5zYyksIGNvbC5uYW1lID0gIkNlbGx0eXBlc01haW4yIikKICAgCiAgICAKICAgIAoKYGBgCgoKU2VlIHRoZSBEaW1wbG90CgpgYGB7cn0KRGltUGxvdChuc2MsIGdyb3VwLmJ5ID0gJ2ludGVncmF0ZWRfc25uX3Jlcy4wLjI1JywgbGFiZWwgPSBUUlVFKSAKCkRpbVBsb3QobnNjLCBncm91cC5ieSA9ICJDZWxsdHlwZXMxIiwgbGFiZWwgPSBUUlVFKQojRGltUGxvdChuc2MsIGdyb3VwLmJ5ID0gIkNlbGx0eXBlczIiLCBsYWJlbCA9IFRSVUUpCiNEaW1QbG90KG5zYywgZ3JvdXAuYnkgPSAiQ2VsbHR5cGVzTWFpbiIsIGxhYmVsID0gVFJVRSkKRGltUGxvdChuc2MsIGdyb3VwLmJ5ID0gIkNlbGx0eXBlc01haW4yIiwgbGFiZWwgPSBUUlVFKQojRGltUGxvdChuc2MsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgbGFiZWwgPSBUUlVFLCBwdC5zaXplID0gMC4xLCByYXN0ZXIgPSBGQUxTRSkgCgpgYGAKCgpgYGB7cn0KCklkZW50cyhuc2MpIDwtICJDZWxsdHlwZXNNYWluMiIKdGFibGUobnNjJENlbGx0eXBlc01haW4yKQp1bmlxdWUobnNjJENlbGx0eXBlc01haW4yKQpuc2Nfc3ViIDwtIEZpbmRNYXJrZXJzKG5zYywgaWRlbnQuMSA9ICJOU0NfdmFzY3VsYXR1cmUiLCBpZGVudC4yID0gIk5TQyIsIG9ubHkucG9zID0gRkFMU0UpCgp3cml0ZS5jc3YobnNjX3N1YiwgInN1YnR5cGVNYXJrZXJzX05TQ3Zhc1ZTX05TQy5jc3YiKQoKCk5QQ19tYXJrZXJzIDwtIEZpbmRNYXJrZXJzKG5zYywgaWRlbnQuMSA9ICJOUEMiLCBpZGVudC4yID0gYygiTlBDX2dsaWEiLCAiUHJvZ2VuaXRvcnMiKSwgb25seS5wb3MgPSBUUlVFKQpQcm9nZW5pdG9yX21hcmtlcnMgPC0gRmluZE1hcmtlcnMobnNjLCBpZGVudC4xID0gIlByb2dlbml0b3JzIiwgaWRlbnQuMiA9IGMoIk5QQ19nbGlhIiwgIk5QQyIpLCBvbmx5LnBvcyA9IFRSVUUpCk5QQ19nbGlhIDwtIEZpbmRNYXJrZXJzKG5zYywgaWRlbnQuMSA9ICJOUENfZ2xpYSIsIGlkZW50LjIgPSBjKCJQcm9nZW5pdG9ycyIsICJOUEMiKSwgb25seS5wb3MgPSBUUlVFKQoKTmV1cm9uc19zdWIgPC0gRmluZE1hcmtlcnMobnNjLCBpZGVudC4xID0gIk5ldXJvbnMiLCBpZGVudC4yID0gIk5ldXJvbnNfRXgiLCBvbmx5LnBvcyA9IEZBTFNFKQoKCgpgYGAKCk5hbWUgRmlicm9ibGFzdCBhcyBHbGlhCktlZXAgTlBDLWdsaWEKQ2hhbmdlIFByZWN1cnNvciB2cyBOUEMKCk5TQy12YXMgaXMgbm93IE5TQy1BUE9BMQpOU0MtIFNPWDIKCk5QQy1NRUYyQwpQcm9nZW4gaXMgcmVhbGx5IE5QQy1QT1U1RjEKTlBDLVMxMDBCCgpOZXVyb25zLURDWCAgICh3YXMgbmV1cm9ucykKTmV1cm9ucy1HUklBMSAod2FzIGV4Y2l0YXRvcnkgbmV1cm9ucykKClNlZSB0aGUgbmV1cm9ucyBvYmplY3QKCgpgYGB7cn0KCmNsdXN0ZXIuaWRzPC1jKCJOZXVyb25zLUdSSUExIiwgIkdsaWEiLCAiTmV1cm9ucy1EQ1giLCAiTlBDLVBPVTVGMSIsICJOU0MtU09YMiIsICJOU0MtU09YMiIsICJOUEMtUzEwMEIiLCAiTlBDLVBPVTVGMSIsICJOUEMtTUVGMkMiLCAiTmV1cm9ucy1EQ1giLCAiTlNDLUFQT0ExIiwgIk5TQy1TT1gyIikgIyBDZWxsIHR5cGVzIHNpbXBsaWZpZWQKICBJZGVudHMobnNjKSA8LSAnaW50ZWdyYXRlZF9zbm5fcmVzLjAuMjUnCiAgbmFtZXMoY2x1c3Rlci5pZHMpIDwtIGxldmVscyhuc2MpCiAgbnNjIDwtIFJlbmFtZUlkZW50cyhuc2MsIGNsdXN0ZXIuaWRzKQogIG5zYyA8LSBBZGRNZXRhRGF0YShvYmplY3Q9bnNjLCBtZXRhZGF0YT1JZGVudHMobnNjKSwgY29sLm5hbWUgPSAiQ2VsbHR5cGVzRmluYWwiKQogIApEaW1QbG90KG5zYywgZ3JvdXAuYnkgPSAiQ2VsbHR5cGVzRmluYWwiLCBsYWJlbCA9IFRSVUUpCiAgCiAgCmBgYAoKCgoKCmBgYHtyfQoKZmNuIDwtIHJlYWRSRFMoIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL3NjUk5Bc2VxL0FESERfWk5aX01jZ2lsbC9BREhEcmVzdWx0c0ZlYjEwL0ZDTi9zdGVwNy9vYmpzNy9zZXVfc3RlcDcucmRzIikKYGBgCgpgYGB7cn0KRGltUGxvdChmY24pCkRpbVBsb3QoZmNuLCBsYWJlbCA9IFRSVUUpCgojZmNuJGludGVncmF0ZWRfc25uX3Jlcy4wLjI1CmBgYAoKYGBge3J9CgphbiA8LSBnZXRfYW5ub3RhdGlvbihmY24sIHNldS5jbHVzdGVyID0gIGZjbiRSTkFfc25uX3Jlcy4wLjI1LHNldS5sYWJlbCA9IGZjbiRSaGFsZW5hX3Bvb2wxX29ial9hbm5vdDJfcHJlZGljdGlvbnMsdG9wX24gPSA1LCBMYWJlbCA9ICJQcmVkaWN0ZWQiKQoKdGIgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShmY24kaW50ZWdyYXRlZF9zbm5fcmVzLjAuMjUsZmNuJFJoYWxlbmFfcG9vbDFfb2JqX2Fubm90Ml9wcmVkaWN0aW9ucykpCnRiCgoKCmBgYAoKClRyYW5zZmVyIGxhYmxlcyBwcmVkaWN0aW9ucwoKIyBuZWVkIHRvIG1hdGNoIHZlcnNpb24gNCBhbmQgdmVyc2lvbiA1IHNldXJhdAoKYGBge3J9CgoKYGBgCgoKCgoKCmBgYHtyfQojIHRoaXMgaXMgdGhlIHJlZmVyZW5jZSBkYXRhCk1CTyA8LSByZWFkUkRTKCIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9zY1JOQXNlcS9BU1QyM19CcmFpbkNvbW0vTUJPY2x1c3RlcnNfbmFtZXMyOTA3MjAyMS5yZHMiKQoKSWRlbnRzKE1CTykgPC0gImNsdXN0ZXJfbGFiZWxzIgoKRGVmYXVsdEFzc2F5KE1CTykgPC0gIlJOQSIKRGVmYXVsdEFzc2F5KGZjbikgPC0gImludGVncmF0ZWQiCiMgZmluZCB0aGUgcmVmZXJlbmNlIGFuY2hvcnMKcHJpbnQoImZpbmRpbmcgcmVmZXJlbmNlIGFuY2hvcnMiKQpNeWFuY2hvcnMgPC0gRmluZFRyYW5zZmVyQW5jaG9ycyhyZWZlcmVuY2UgPSBNQk8gLHF1ZXJ5ID0gZmNuLCBkaW1zID0gMTozMCkKIyBjYW4gdHJ5IGEgcmFuZ2Ugb2YgZGltcyAyMC01MApwcmludCgiZ2V0dGluZyBwcmVkaWN0aW9ucyIpCnByZWRpY3Rpb25zIDwtIFRyYW5zZmVyRGF0YShhbmNob3JzZXQgPSBNeWFuY2hvcnMsIHJlZmRhdGEgPSBNQk8kY2x1c3Rlcl9sYWJlbHMpCmZjbiA8LSBBZGRNZXRhRGF0YShmY24sIG1ldGFkYXRhID0gcHJlZGljdGlvbnMpCgoKcHJpbnQodGFibGUoTU8ucXVlcnkkcHJlZGljdGVkLmlkKSkKYGBgCgoKVmlzdWFsaXplIGV4cHJlc3Npb24gCgoKYGBge3J9CgplYXJseU5ldXIgPSBjKCJEQ1giLCJORVVST0QxIiwiVEJSMSIpCgpEZWZhdWx0QXNzYXkoZmNuKSA8LSAiaW50ZWdyYXRlZCIKRmVhdHVyZVBsb3QoZmNuLCBmZWF0dXJlcyA9IGVhcmx5TmV1cikKRG90UGxvdChmY24sIGZlYXR1cmVzID0gZWFybHlOZXVyLCBncm91cC5ieSA9ICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC4yNSIpCgpgYGAKCmBgYHtyfQoKcHJvbGlmZXJhdGlvbiA9IGMoIlBDTkEiLCJNS0k2NyIpCm5ldXJhbHN0ZW0gPSBjKCJTT1gyIiwiTkVTIiwiUEFYNiIsIk1BU0gxIikKCkRvdFBsb3QoZmNuLCBmZWF0dXJlcyA9IHByb2xpZmVyYXRpb24sIGdyb3VwLmJ5ID0gImludGVncmF0ZWRfc25uX3Jlcy4wLjI1IikKRmVhdHVyZVBsb3QoZmNuLCBmZWF0dXJlcyA9IHByb2xpZmVyYXRpb24pCgpgYGAKYGBge3J9Cm5ldXJhbHN0ZW0gPSBjKCJTT1gyIiwiTkVTIiwiUEFYNiIsIk1BU0gxIikKCkRvdFBsb3QoZmNuLCBmZWF0dXJlcyA9IG5ldXJhbHN0ZW0sIGdyb3VwLmJ5ID0gImludGVncmF0ZWRfc25uX3Jlcy4wLjI1IikKRmVhdHVyZVBsb3QoZmNuLCBmZWF0dXJlcyA9IG5ldXJhbHN0ZW0pCgpgYGAKCmBgYHtyfQojIFRyeSBzb21lIGZpcnN0IGRyYWZ0IGFubm90YXRpb25zCiMgcm91Z2ggYW5ub3RhdGlvbnMKCgpjbHVzdGVyLmlkczwtYygiRGlmZmVyZW50YXRpbmdfdG9fbmV1cm9ucyIsICJQcm9saWZlcl9OZXVyYWxTdGVtIiwgIk5QQyIsICJOZXVyb25zX21vZHVsYXRvciIsICJFbmRvX0dsaWEiLCAiRW5kb19SRyIsICJFbmRvX25ldXJvYmxhc3RzIiwgIk5QQ19SR19kaXZpZGluZyIsICJSR19uZXVyYWwiLCAiTmV1cm9ucyIpIAogIElkZW50cyhmY24pIDwtICdpbnRlZ3JhdGVkX3Nubl9yZXMuMC4yNScKICBuYW1lcyhjbHVzdGVyLmlkcykgPC0gbGV2ZWxzKGZjbikKICBmY24gPC0gUmVuYW1lSWRlbnRzKGZjbiwgY2x1c3Rlci5pZHMpCiAgZmNuIDwtIEFkZE1ldGFEYXRhKG9iamVjdD1mY24sIG1ldGFkYXRhPUlkZW50cyhmY24pLCBjb2wubmFtZSA9ICJDZWxsdHlwZXMxIikKCkRpbVBsb3QoZmNuLCBsYWJlbCA9IFRSVUUsIGdyb3VwLmJ5ID0gIkNlbGx0eXBlczEiKQoKYGBgCgpgYGB7cn0KIyBzaW1wbGlmeSBjZWxsIHR5cGVzIDEKY2x1c3Rlci5pZHM8LWMoIkRpZmZlcmVudGF0aW5nX3RvX25ldXJvbnMiLCAiTlNDIiwgIk5TQyIsICJOZXVyb25zIiwgIkVuZG90aGVsaWFsIiwgIkVuZG90aGVsaWFsIiwgIkVuZG90aGVsaWFsIiwgIk5TQyIsICJOZXVyb2JsYXN0cyIsICJOZXVyb25zIikgCiAgSWRlbnRzKGZjbikgPC0gJ2ludGVncmF0ZWRfc25uX3Jlcy4wLjI1JwogIG5hbWVzKGNsdXN0ZXIuaWRzKSA8LSBsZXZlbHMoZmNuKQogIGZjbiA8LSBSZW5hbWVJZGVudHMoZmNuLCBjbHVzdGVyLmlkcykKICBmY24gPC0gQWRkTWV0YURhdGEob2JqZWN0PWZjbiwgbWV0YWRhdGE9SWRlbnRzKGZjbiksIGNvbC5uYW1lID0gIkNlbGx0eXBlc01haW4xIikKCkRpbVBsb3QoZmNuLCBsYWJlbCA9IFRSVUUsIGdyb3VwLmJ5ID0gIkNlbGx0eXBlc01haW4xIikKCgoKYGBgCgoK